プライベートなコンテナイメージを Amazon Lightsail コンテナサービスで使う
先日に続き、Amazon Lightsail コンテナサービスのネタです。アップデート記事は以下を参照ください。
上記のエントリーで「使用できるコンテナレジストリはパブリックコンテナレジストリのみ」と書いています。
「え、パブリックレジストリしか使えんのやったら、業務アプリとかアカンやん」
と思われたかもしれませんが、そのような場合は Lightsail コンテナサービスに直接 push することでプライベートなコンテナイメージも使用することが出来ます、というのが今回の記事になります。
Lightsail へのイメージ push の準備
以下のツールが必要になりますので、これらをインストールします。
- AWS CLI v2.1.1 以降
- AWS CLI v1 では Lightsail コンテナサービスへの push がサポートされていません
- LightsailControl プラグイン
AWS CLI v2 インストール
まずは AWS CLI v2 をインストールします。以下、macOSの手順ですがその他 OS については公式ガイドを参考にしてください。
$ curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg" $ sudo installer -pkg AWSCLIV2.pkg -target / $ aws --version aws-cli/2.1.1 Python/3.7.4 Darwin/19.6.0 exe/x86_64
LightsailControl プラグイン
LightsailControl プラグインをインストールします。こちらも macOS の手順ですのでその他 OS については公式ガイドを参考にしてください。
$ sudo curl "https://s3.us-west-2.amazonaws.com/lightsailctl/latest/darwin-amd64/lightsailctl" -o "/usr/local/bin/lightsailctl" $ sudo chmod +x /usr/local/bin/lightsailctl $ xattr -c /usr/local/bin/lightsailctl
IAM 権限
最低限、以下の IAM 権限があればイメージを push できます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "lightsail:CreateContainerServiceRegistryLogin", "lightsail:RegisterContainerImage" ], "Resource": "*" } ] }
Lightsail にコンテナイメージを push
ローカルの Docker 環境にコンテナイメージを準備しておきます。
$ docker images lightsail-hello-world REPOSITORY TAG IMAGE ID CREATED SIZE lightsail-hello-world latest 4e96c574653c 2 minutes ago 899MB
イメージの push は aws lightsail push-container-image
コマンドを使用します。
$ aws lightsail push-container-image ¥ --region <Region> ¥ --service-name <ContainerServiceName> ¥ --label <ContainerImageLabel> ¥ --image <LocalContainerImageName>:<ImageTag>
今回はコンテナサービス container-service-1
に lightsail-hello-world:latest
イメージを push します。ラベル名は testlabel
としました。
$ aws lightsail push-container-image ¥ --region ap-northeast-1 ¥ --service-name container-service-1 ¥ --label testlabel ¥ --image lightsail-hello-world:latest bc153fd226de: Pushed c3ab11b5270a: Pushed 431fc29f78ab: Pushed 641e75738194: Pushed c4fc3bd6e3cb: Pushed 5f03d9827383: Pushed 6f7043721c9b: Pushed a933681cf349: Pushed f49d20b92dc8: Pushed fe342cfe5c83: Pushed 630e4f1da707: Pushed 9780f6d83e45: Pushed Digest: sha256:ae3a0a02024182d2279c0100953634f22e1b825edac387951f98ae75cb795834 Image "lightsail-hello-world:latest" registered. Refer to this image as ":container-service-1.testlabel.1" in deployments.
Lightsail コンテナサービスにストアされるイメージ名は <コンテナサービス名>.<ラベル名>.<バージョン番号>
という形になります。イメージが push されると [イメージ] タブが表示されるようになります。
Lightsail コンテナサービスにストアされているイメージを使用する場合は、保存したイメージを選択
をクリックして選択するだけです。
その他、必要なパラメータを指定し 保存とデプロイ
でデプロイします。
$ curl https://container-service-1.XXXXXXXXXXXXX.ap-northeast-1.cs.amazonlightsail.com/ {"message": "Hello Flask API World!"}
パブリックコンテナレジストリを使わずに Lightsail コンテナサービスでコンテナを動かすことが出来ましたね!検証は以上です。
さいごに
あくまで「コンテナレジストリ」としてはパブリックコンテナレジストリのみがサポートされているのであって、プライベートなコンテナイメージを利用することは可能ですよ! ということをお伝えしたく記事にしました。
ECR などプライベートコンテナレジストリのサポートは今後のアップデートに期待しつつ、個人的には直接 Lightsail にイメージを push して利用できるのもシンプルで Lightsail らしい使い方かな、と思います。
以上!大阪オフィスの丸毛(@marumo1981)でした!